package com.rds.material.mapper;

import com.rds.common.api.material.domain.MaterialBill;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Map;

/**
 * 材料清单Mapper接口
 *
 * @author rds
 * @date 2021-08-17
 */
@Repository
public interface MaterialBillMapper
{
    /**
     * 查询材料清单
     *
     * @param id 材料清单ID
     * @return 材料清单
     */
     MaterialBill selectMaterialBillById(Long id);


    List<MaterialBill> selectMaterialBillByIds(List<Long> ids);

    /**
     * 查询材料清单
     * @param parentid 材料清单ID
     * @return 材料清单
     */
     MaterialBill selectMaterialBillByMid(@Param("parentid") Long parentid, @Param("materialid") Long materialid);

    /**
     * 查询材料清单列表
     *
     * @param materialBill 材料清单
     * @return 材料清单集合
     */
     List<MaterialBill> selectMaterialBillList(MaterialBill materialBill);


    List<MaterialBill> selectMaterialBillListLJRel(MaterialBill materialBill);


    /**
     * 查询材料清单列表替换id为rel的id
     *
     * @param materialBill 材料清单
     * @return 材料清单集合
     */
     List<MaterialBill> selectMaterialBillListReplaceRelId(MaterialBill materialBill);

    /**el
     * 查找关系表
     */
    List<MaterialBill> selectMaterialBillRelList(MaterialBill materialBill);


    /**
     * 查询材料清单下级列表
     *
     * @param materialBill 材料清单
     * @return 材料清单集合
     */
     List<MaterialBill> selectMaterialBillLowerList(MaterialBill materialBill);

    /**
     * 新增材料清单
     *
     * @param materialBill 材料清单
     * @return 结果
     */
     int insertMaterialBill(MaterialBill materialBill);

    /**
     * 修改材料清单
     *
     * @param materialBill 材料清单
     * @return 结果
     */
     int updateMaterialBill(MaterialBill materialBill);

    /**
     * 删除材料清单
     *
     * @param id 材料清单ID
     * @return 结果
     */
     int deleteMaterialBillById(Long id);

    /**
     * 批量删除材料清单
     *
     * @param ids 需要删除的数据ID
     * @return 结果
     */
     int deleteMaterialBillByIds(Long[] ids);


    /**
     * 查询材料清单信息
     *
     * @param mid 材料清单id
     * @return 材料清单集合
     */
     List<MaterialBill> selectMaterialBillInfoByMId(@Param("mid") Long mid);

    /**
     * 查询材料清单 版本信息
     *
     * @param toid id
     * @return 材料清单集合
     */
     MaterialBill selectMaterialBill(@Param("toid") Long toid);

    /**
     * 根据ID查询材料清单下级信息
     *
     * @param id id
     * @return 材料清单集合
     */
     List<MaterialBill> selectMaterialBillSubordinate(@Param("id") Long id);

    /**
     * 根据材料清单id删除材料清单
     *
     * @param materialid 材料清单ID
     * @return 材料清单
     */
    int deleteMaterialBillByMid(Long materialid);

    /**
     * 批量修改材料清单状态
     * @param materialid 材料清单id
     * @param stateid 需要更改的状态
     * @return 材料清单
     */
     int updateMaterialBillIds(@Param("materialid") Long materialid, @Param("stateid") Long stateid);

    /**
     * 根据物料id删除材料清单
     *
     * @param id 物料ID
     * @return 材料清单
     */
    int deleteMaterialBillByMId(Long id);

    /**
     * cloneEBOM
     * @param materialBill
     * @return cloneEBOM
     */
    List<MaterialBill> selectCloneEBOM(MaterialBill materialBill);

    /**
     * 克隆EBOMT 修改
     * @param materialBill
     * @return 项目WBS
     */
    int updateEBOMTask(MaterialBill materialBill);

    /**
     * 克隆EBOMT 修改
     * @param materialBill
     * @return 项目WBS
     */
    int updateEBOMTaskUpper(MaterialBill materialBill);


    /**
     * 获取所有物料，包括关联和未关联的关系
     * @param materialBill
     * @return
     */
    List<MaterialBill> selectMaterialBillByAll(MaterialBill materialBill);

    /**
     * 获取所有物料下未关联的关系
     * @param materialBill
     * @return
     */
    List<MaterialBill> selectMaterialBillByUnasso(MaterialBill materialBill);

    /**
     * 获取当前物料下所有关联的关系
     */
    List<MaterialBill> selectTreeList(MaterialBill materialBill);



    @Select("SELECT\n" +
            "\trr.id,rb.name,rb.code,rb.description,rb.typeid,rb.stateid,rb.revision,rb.units,rb.ownerid,rr.quantity,rr.remark\n" +
            "FROM\n" +
            "\trda_material_bill rb\n" +
            "\tinner join rda_parts_rel rr on rb.id = rr.fromid <where>         \n" +
            "\t\t<if test=\"id != null \">rr.id = #{id}</if>\n" +
            "</where>")
    List<Map<String,Object>> selectMaterialBillAndRdaPartRel(MaterialBill materialBill);

}
